﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace xiaodingmarket_Domain.Interfaces
{
    public interface IRepository<TEntity> : IDisposable where TEntity : class
    {
        //仓储的要点是保持你的领域模型和技术持久化框架的独立性，
        //仓储是基础设施层的组成部分，位于领域层的下方，按理来说，
        //领域层应该依赖仓储，但这会导致领域层与具体数据访问组件耦合，降低了领域层的复用能力。为了让领域层更加纯净，
        //可以应用依赖倒置原则（DIP）。依赖倒置原则提到，高层模块不应该依赖低层模块，
        //这里的高层模块就是领域层，低层模块是基础设施层的仓储。 
        //为了让领域层可以访问到仓储提供的服务，需要抽取仓储接口，你可以把这些接口放到独立的程序集中，但这会增加不必要的开销。一种更好的方法是直接把低层接口放入使用它们的客户程序集中，这样可以简化设计，仅在必要时才分离出独立的接口程序集。这样你的领域模型可以隔离来自底层持久化技术的影响
        void Add(TEntity obj);
        TEntity GetById(Guid id);
        IQueryable<TEntity> GetAll();//IQueryable<TEntity>延迟加载
        void Update(TEntity obj);
        void Remove(Guid id);
        int SaveChanges();
    }
}
